<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>JS引擎运行机制</title>
</head>

<body>

</body>
<script>
    var isEnd = true;
    window.setTimeout(function () {
        isEnd = false;//3s后，改变isEnd的值
        console.log(isEnd);
    }, 3000);
    while (isEnd);
    console.log(isEnd);

    /*
        页面运行过程：
            假死页面  js到while后进入死循环 后面定时器加入的任务无法继续
    */

    /*
        JS引擎单线程运行
            js引擎单线程执行的，它是基于事件驱动的语言。它的执行顺序是遵循一个叫做事件队列的机制。浏览器有各种各样的线程，比如事件触发器，网络请求，定时器等等。线程的联系是基于事件的。js引擎处理到与其他线程相关的代码，就会分发给其他线程，他们处理完之后，需要js引擎计算时就是在事件队列里面添加一个任务。这个过程中，js并不会阻塞代码等待其他线程执行完毕，而且其他线程执行完毕后添加事件任务告诉js引擎执行相关操作，这就是js的异步编程模型。该例子中js线程运行到setTimeout时，会开启一个定时器线程，然后继续执行下面代码，该线程会在指定事件后往事件队列里面插入一个任务。所有主线程任务结束之后运行插入的这个任务。

        浏览器多线程运行
            浏览器的内核是多线程的，它们在内核制控下相互配合以保持同步，一个浏览器至少实现三个常驻线程：javascript引擎线程，GUI渲染线程，浏览器事件触发线程

        
    
    */

</script>

</html>